home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
010
/
pcmaze.bas
< prev
next >
Wrap
BASIC Source File
|
1985-04-17
|
7KB
|
204 lines
0 REM MODIFIED FOR USE ON THE IBM-PC
1 REM BY GARY & DONNA MCCOY
2 KEY OFF
3 CLEAR,,20000
4 SCREEN 0:WIDTH 40
200 CLS : GOTO 6400
800 N = 2:A = H:B = V:FF = 2 ^ (F - 1)
900 SCREEN 1:COLOR 0,1:CLS
1000 Z = M(A,B) * FF
1200 IF FN M(Z / 16) = 0 THEN 1600
1300 RL = - 1: GOSUB 5400
1400 GOTO 2000
1600 W = M(A + S,B - R) * FF
1700 IF FN M(W / 128) = 0 THEN 2000
1800 RL = - 1: GOSUB 4600
2000 IF FN M(Z / 64) = 0 THEN 2400
2100 RL = 1: GOSUB 5400
2200 GOTO 2800
2400 W = M(A - S,B + R) * FF
2500 IF FN M(W / 128) = 0 THEN 2800
2600 RL = 1: GOSUB 4600
2800 IF FN M(Z / 128) = 1 THEN 3400
3000 N = N + 1: IF N > 8 THEN 3500
3100 A = A + R:B = B + S: IF B < 2 THEN 3500
3200 GOTO 1000
3400 GOSUB 3800
3500 RETURN
3800 PSET (VX + DX(N),YU(N)),2
3900 LINE (VX + DX(N),YU(N))-(VX + DX(N),YD(N)),2
4000 LINE (VX + DX(N),YD(N))-(VX - DX(N),YD(N)),2
4100 LINE (VX - DX(N),YD(N))-(VX - DX(N),YU(N)),2
4200 LINE (VX - DX(N),YU(N))-(VX + DX(N),YU(N)),2
4300 RETURN
4600 PSET (VX + RL * DX(N - 1),YU(N)),2
4700 LINE (VX + RL * DX(N - 1),YU(N))-(VX + RL * DX(N),YU(N)),2
4800 LINE (VX + RL * DX(N),YU(N))-(VX + RL * DX(N),YD(N)),2
4900 LINE (VX + RL * DX(N),YD(N))-(VX + RL * DX(N - 1),YD(N)),2
5000 RETURN
5400 PSET(VX + RL * DX(N - 1),YU(N - 1)),2
5500 LINE (VX + RL * DX(N-1),YU(N-1))-(VX + RL * DX(N),YU(N)),2
5600 LINE (VX + RL * DX(N),YU(N))-(VX + RL * DX(N),YD(N)),2
5700 LINE (VX + RL * DX(N),YD(N))-(VX + RL * DX(N - 1),YD(N - 1)),2
5800 IF N > 2 THEN LINE (VX + RL * DX(N-1),YD(N-1))-(VX + RL * DX(N - 1),YU(N - 1)),2
5900 RETURN
6400 CLS:COLOR 9,0:LOCATE 6,12: PRINT "YOU ARE THE RAT!": PRINT : LOCATE 4,4: PRINT "A DIFFERENT PERSPECTIVE ON MAZES."
6405 CH = 0
6410 PRINT : LOCATE 1,1: PRINT "FROM THE COMPUSERVE APPLE USER'S GROUP"
6420 LOCATE 2,9: PRINT "PUBLIC ACCESS DATABASE"
6425 LOCATE 17,1: PRINT "----------------------------------------"
6430 LOCATE 18,9: PRINT "USE <- AND -> TO TURN"
6440 PRINT : LOCATE 19,6: PRINT "<SPACE BAR> TO MOVE FORWARD"
6450 PRINT : LOCATE 20,3: PRINT "<ESCAPE> FOR A TOP VIEW (TO CHEAT)"
6500 DEF FN M(X) = INT (X) - INT ( INT (X) / 2) * 2
6600 LOCATE 15,1:FX = 36: INPUT "PLEASE ENTER MAZE SIZE (H,V) ";H,V
6700 H = INT (H):V = INT (V)
6800 IF H > 2 AND H < 51 AND V > 2 AND V < 51 THEN 7000
6900 PRINT "2<H<51 -- 2<V<51": GOTO 6600
7000 N = H * V - 1:H = H + 1:V = V + 1:D = 1
7100 DIM M(52,52),W(400)
7200 FOR J = 1 TO V + 1:M(1,J) = 4:M(H + 1,J) = 1: NEXT J
7300 MX = 278:MY = 190:VX = INT (MX / 2):VY = INT (MY / 2):X = VX
7500 FOR J = 1 TO 8:DX(J) = X:YU(J) = INT (VY - X * VY / VX)
7600 YD(J) = INT (VY + X * (MY - VY) / VX):X = INT (X * 7 / 10): NEXT J
7700 FOR I = 2 TO H:M(I,V + 1) = 8:M(I,1) = 2
7800 FOR J = 2 TO V:M(I,J) = 15: NEXT J,I
8500 R = INT (H / 2 + 1):S = INT (V / 2 + 1):M(R,S) = 15
8550 COLOR 23
8600 PRINT " GENERATING MAZE."
8650 COLOR 9
8900 FOR IW = 1 TO N
9000 I = 0
9100 IF M(R - 1,S) < 15 THEN 9300
9200 I = I + 1:C(I) = 1
9300 IF M(R,S - 1) < 15 THEN 9500
9400 I = I + 1:C(I) = 2
9500 IF M(R + 1,S) < 15 THEN 9700
9600 I = I + 1:C(I) = 3
9700 IF M(R,S + 1) < 15 THEN 9900
9800 I = I + 1:C(I) = 4
9900 IF I = 0 THEN 12300
10000 IF I < > 1 THEN I = INT ( RND (1) * I) + 1
10100 ON C(I) GOTO 10300,10800,11300,11800
10300 M(R,S) = M(R,S) - FN M(M(R,S))
10400 R = R - 1
10500 M(R,S) = M(R,S) - FN M(M(R,S) / 4) * 4
10600 GOTO 13400
10800 M(R,S) = M(R,S) - FN M(M(R,S) / 8) * 8
10900 S = S - 1
11000 M(R,S) = M(R,S) - FN M(M(R,S) / 2) * 2
11100 GOTO 13400
11300 M(R,S) = M(R,S) - FN M(M(R,S) / 4) * 4
11400 R = R + 1
11500 M(R,S) = M(R,S) - FN M(M(R,S))
11600 GOTO 13400
11800 M(R,S) = M(R,S) - FN M(M(R,S) / 2) * 2
11900 S = S + 1
12000 M(R,S) = M(R,S) - FN M(M(R,S) / 8) * 8
12100 GOTO 13400
12300 IF D = - 1 THEN 12700
12400 IF R < > H THEN 13100
12500 IF S < > V THEN 13000
12600 R = 2:S = 2: GOTO 13200
12700 IF R < > 2 THEN 13100
12800 IF S < > V THEN 13000
12900 R = H:S = 2: GOTO 13200
13000 S = S + 1:D = - D: GOTO 13200
13100 R = R + D
13200 IF M(R,S) = 15 THEN 12300
13300 GOTO 9000
13400 NEXT IW
13500 MH = H:MV = V
13700 I = INT ( RND (1) * (MH - 1)) + 2
13800 M(I,1) = 0
13900 M(I,2) = M(I,2) - FN M(M(I,2) / 8) * 8
14000 H = INT ( RND (1) * (MH - 1)) + 2
14100 H1 = H:V1 = V
14300 COLOR 23: LOCATE 23,12: PRINT "MAZE COMPLETED.": COLOR 9
14400 GOTO 17000
14700 HZ = INT (MX / MH):VZ = INT (MY / MV)
14750 CH = CH + 1
14800 SCREEN 1:COLOR 0,1:CLS
14900 PSET (1 + HZ,1 + VZ),2
15000 LINE (1 + HZ,1 + VZ)-(1 + HZ,MV * VZ + 1),2
15100 FOR J = 1 TO MV: FOR I = 2 TO MH
15200 N = M(I,J):X = I * HZ + 1:Y = J * VZ + 1
15300 IF FN M(N / 2) = 0 THEN 15700
15500 PSET (X,Y),2
15600 LINE (X,Y)-(X - HZ,Y),2
15700 IF FN M(N / 4) = 0 THEN 16100
15900 PSET (X,Y),2
16000 LINE (X,Y)-(X,Y - VZ),2
16100 NEXT I,J
16300 X = H * HZ - 1:Y = V * VZ - 1
16400 PSET (X + 1,Y + 1),2
16500 LINE (X + 1,Y + 1)-(X - HZ + 2,Y - VZ + 2),2
16600 PSET (X - HZ + 2,Y + 1),2
16700 LINE (X - HZ + 2,Y + 1)-(X + 1,Y - VZ + 2),2
16800 RETURN
17000 FOR X = 1 TO MH: FOR Y = 1 TO MV
17100 M(X,Y) = M(X,Y) + M(X,Y) * 16
17200 NEXT Y,X
17500 F = INT ( RND (1) * 4) + 1
17600 ON F GOTO 17700,17800,17900,18000
17700 R = 0:S = - 1: GOTO 18100
17800 R = 1:S = 0: GOTO 18100
17900 R = 0:S = 1: GOTO 18100
18000 R = - 1:S = 0
18100 GOSUB 800
18300 DEF SEG : POKE 106,0
18400 IK$=INKEY$
18410 KEY(12) ON
18420 KEY(13) ON
18500 ON KEY(12) GOSUB 19100
18600 ON KEY(13) GOSUB 19400
18700 IF IK$ = " " THEN 20100
18800 IF IK$ = CHR$(27) THEN 21300
18900 GOTO 18400
19100 F = F - 1: IF F < 1 THEN F = 4
19200 GOTO 19500
19400 F = F + 1: IF F > 4 THEN F = 1
19500 ON F GOTO 19600,19700,19800,19900
19600 R = 0:S = - 1: GOTO 21000
19700 R = 1:S = 0: GOTO 21000
19800 R = 0:S = 1: GOTO 21000
19900 R = - 1:S = 0: GOTO 21000
20100 Z = M(H,V)
20200 T = Z * 2 ^ (F - 1):T = FN M(T / 128)
20300 IF T = 0 THEN 20600
20500 GOTO 18300
20600 NM = NM + 1: LOCATE 22,24: PRINT "MOVE "NM
20650 FOR Q=1 TO 500:NEXT
20700 IF NM < 400 THEN W(NM) = F
20800 H = H + R:V = V + S
20900 IF V < 2 THEN 21500
21000 GOSUB 800
21100 GOTO 18300
21300 GOSUB 14700
21400 GOTO 18300
21500 CLS : LOCATE 12,5: PRINT "CONGRATS, IT TOOK YOU "NM" STEPS."
21540 IF CH = 1 THEN LOCATE 14,8: PRINT "(BUT YOU CHEATED ONCE.)
21550 IF CH > 1 THEN LOCATE 14,6: PRINT " (BUT YOU CHEATED ";CH;" TIMES.)"
21560 FOR I=1 TO 5000:NEXT
21700 V = V1:H = H1: GOSUB 14700
21900 X = INT (H * HZ - HZ / 2) + 1:Y = INT (V * VZ - VZ / 2) + 1
22000 PSET (X,Y),1
22100 FOR N = 1 TO NM
22200 IF N > 400 THEN 22900
22300 F = W(N)
22400 IF F = 1 THEN V = V - 1
22500 IF F = 2 THEN H = H + 1
22600 IF F = 3 THEN V = V + 1
22700 IF F = 4 THEN H = H - 1
22800 LINE (X,Y)-(INT (H * HZ - HZ / 2) + 1, INT (V * VZ - VZ / 2) + 1),1
22850 X=INT(H * HZ - HZ/2) + 1:Y=INT(V * VZ -VZ/2) + 1
22900 NEXT N
22920 LOCATE 1,1:PRINT "PRESS ANY KEY TO CONTINUE"
22950 IK$=INKEY$
23000 KEY(12) OFF:KEY(13) OFF: IF IK$ = "" THEN 22950
23100 CLEAR:GOTO 3
50000 REM
Y KEY TO CONTINUE"
22950 IK$=INKEY$
23000 KEY(12) OFF:KEY(13) OFF: IF IK$ = "" THEN 22950
23100 CLEAR:GOT